/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.gob.mh.dgii.model.validators;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import sv.gob.mh.dgii.common.Utils;
import sv.gob.mh.dgii.model.RcRepresentante;
import sv.gob.mh.dgii.model.custom.constraints.SeccionFValid;
import sv.gob.mh.dgii.model.pojos.ruc.F;

/**
 *
 * @author hgonzalez
 */
public class SeccionFValidator implements ConstraintValidator<SeccionFValid, F> {

    private static String NIT_EQUALS = "El contribuyente no puede ser su mismo representante";
    private static String REPRE_EXISTE = "Representante o apoderado ya existe";
    
    public void initialize(SeccionFValid f) {        
    }
    
    public boolean isValid(F f, ConstraintValidatorContext cvc) {       
        
        cvc.disableDefaultConstraintViolation();
        
        //Valido hasta que todos los campos esten llenos
        //pues solo asi podre comprobar que no existe agregados previamente
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        boolean nit_valid = validator.validate(f.getNit()).isEmpty();
        
        if(nit_valid){
            if(f.getNit().equals(f.getNitTramite())){
                cvc.buildConstraintViolationWithTemplate(NIT_EQUALS).addConstraintViolation();
                return false;
            }            
            
            if(!Utils.isNullOrEmpty(f.getTbRepresentante())){
                for (RcRepresentante r : f.getRepresentantesActuales()) {
                    if(r.getTbRepresentante().getCrepresentante()
                       .equals(f.getTbRepresentante().getCrepresentante())
                       && r.getRcRucByNit().getNit().equals(f.getNit())
                       ){
                        cvc.buildConstraintViolationWithTemplate(REPRE_EXISTE).addConstraintViolation();
                        return false;
                    }
                }
            }
        }
        
        
        
        return true;
    }
  
    
}
